遗传算法的Python实现
遗传算法是一种启发式算法,在优化问题中应用非常之广泛。由于是一种启发式算法,除了用于优化问题外,也有人将之应用到分类、聚类等问题的求解中,取得了非常好的效果。算法设计和参数选择对遗传算法来说非常重要,为此,笔者对遗传算法进行了实现,并比较了不同参数对问题求解的影响。
遗传算法的基本原理
遗传算法主要是受自然界“优胜劣汰、适者生存”启发而设计出来的一种算法,体现的思想是:如果每次都保留适应生存环境的个体,并使之繁衍生息,将以较大概率得到优质群体。需要厘清以下概念:
- 种群:个体的集合,可认为是全部可行解的一个子集(个人认为种群还应该包括各类算子、规则的定义);
- 个体 :代表着可行解(并不一定是最优解);
- 染色体:由基因组成,实质上是自变量的编码方式,在个体的本质特征;
- 选择:留下适应度高的个体,淘汰适应度低的个体;
- 交叉:两个父代染色体之间进行交叉,可以产生下一代(通常是一对);
- 变异:复制过程中可能会产生偏差,是保证种群多样性的重要操作。
优化目标
此程序主要是针对形如以下的函数优化问题。
max f ( x 1 , x 2 , . . . . , x n ) s . t . a 1 ≤ x 1 ≤ b 1 a 2 ≤ x 2 ≤ b 2 . . . . a n ≤ x n ≤ b n \max f(x_1,x_2,....,x_n) \\ s.t. a_1 \le x_1 \le b_1 \\ a_2 \le x_2 \le b_2 \\ ....\\ a_n \le x_n \le b_n maxf(x1,x2,....,xn)s.t.a1≤x1≤b1a2≤x2<